package com.aabte.design2.structural.facade;

/**
 * 为了将框架的复杂性隐藏在一个简单接口背后，我们创建了一个外观类。它是在
 * 功能性和简洁性之间做出的权衡。
 *
 * @author Daniel
 * @version 1.0
 * @date 2020/5/3
 */
public class VideoConverter {

    public VideoFile convert(String fileName, String format) {
        VideoFile videoFile = new VideoFile(fileName);

        // 提取视频文件格式
        String sourceCodec = new CodecFactory().extract(videoFile);

        CompressionCodec destinationCodec;
        if ("mp4".equalsIgnoreCase(format)) {
            destinationCodec = new MPEG4CompressionCodec();
        } else {
            destinationCodec = new OggCompressionCodec();
        }

        // 读取视频文件
        String buffer = BitrateReader.read(fileName, sourceCodec);
        String result = BitrateReader.convert(buffer, destinationCodec);
        result = new AudioMixer().fix(result);
        // save file
        return new VideoFile(result.replace("-content", ""), result);
    }

}
